/*
* Copyright (c) 2016.2，华乘电气科技有限公司
* All rights reserved.
*
* 文件名称：Crypto.h
*
* 初始版本：1.0
* 作者：
* 创建日期：2016年2月26日
* 摘要：该文件主要是定义加密模块
*
*/
#ifndef CRYPTO_H
#define CRYPTO_H

#include "crypto_global.h"



/************************************************
 * 函数名    :initCrypto
 * 输入参数  ：
 *      strKey -- 密钥
 * 输出参数  ：NULL
 * 返回值   ：NULL
 * 功能     ：初始化加密模块函数
 ************************************************/
#ifdef Q_OS_LINUX
extern "C" void CRYPTOSHARED_EXPORT initCrypto( char* pchKey );
#else
extern "C" __declspec(dllexport) void __stdcall initCrypto( char* pchKey );
#endif

/************************************************
 * 函数名    :closeCrypto
 * 输入参数  ：NULL
 * 输出参数  ：NULL
 * 返回值   ：NULL
 * 功能     ：关闭加密模块函数
 ************************************************/
#ifdef Q_OS_LINUX
extern "C" void CRYPTOSHARED_EXPORT closeCrypto( void );
#else
extern "C" __declspec(dllexport) void __stdcall closeCrypto( void );
#endif

/************************************************
 * 函数名    :enCryptFileToFile
 * 输入参数  ：
 *      fileInName -- 输入文件名（带路径）
 *      fileOutName -- 输出文件名（带路径）
 * 输出参数  ：NULL
 * 返回值   ：
 *      true -- 成功
 *      false -- 失败
 * 功能     ：加密函数
 ************************************************/
#ifdef Q_OS_LINUX
extern "C" bool CRYPTOSHARED_EXPORT enCryptFileToFile( const char* fileInName, const char* fileOutName  );
#else
extern "C" __declspec(dllexport) bool __stdcall enCryptFileToFile( const char* fileInName, const char* fileOutName  );
#endif

/************************************************
 * 函数名    :enCryptByteToFile
 * 输入参数  ：
 *      pchData -- 输入数据
 *      uLen -- 长度
 *      fileOutName -- 输出文件
 * 输出参数  ：NULL
 * 返回值   ：
 *      true -- 成功
 *      false -- 失败
 * 功能     ：加密函数
 ************************************************/
#ifdef Q_OS_LINUX
extern "C" bool CRYPTOSHARED_EXPORT enCryptByteToFile( const char* pchData, unsigned long uLen, const char* fileOutName  );
#else
extern "C" __declspec(dllexport) bool __stdcall enCryptByteToFile( const char* pchData, unsigned long uLen, const char* fileOutName  );
#endif


/************************************************
 * 函数名    :deCrypt
 * 输入参数  ：
 *      fileInName -- 输入文件
 *      fileOutName -- 输出文件
 * 输出参数  ：NULL
 * 返回值   ：
 *      true -- 成功
 *      false -- 失败
 * 功能     ：解密函数
 ************************************************/
#ifdef Q_OS_LINUX
extern "C" bool CRYPTOSHARED_EXPORT deCryptFileToFile( const char* fileInName, const char* fileOutName  );
#else
extern "C" __declspec(dllexport) bool __stdcall  deCryptFileToFile( const char* fileInName, const char* fileOutName  );
#endif



/************************************************
 * 函数名    :getDecryptByteLen:注：后续必须加getDecryptByte(char* pchOut);
 * 输入参数  ：
 *      fileInName -- 输入文件名
 * 输出参数  ：NULL
 * 返回值   ：
 *      解密后数据长度
 * 功能     ：获取解密文件名长
 ************************************************/
#ifdef Q_OS_LINUX
extern "C" unsigned long CRYPTOSHARED_EXPORT getDecryptByteLen( const char* fileInName );
#else
extern "C" __declspec(dllexport) unsigned long __stdcall getDecryptByteLen( const char* fileInName );
#endif


/************************************************
 * 函数名    :getDecryptByte
 * 输入参数  ：
 *      pchOut -- 存放数据缓存
 * 输出参数  ：NULL
 * 返回值   ：
 *      true -- 成功
 *      false -- 失败
 * 功能     ：获取解密数据
 ************************************************/
#ifdef Q_OS_LINUX
extern "C" bool CRYPTOSHARED_EXPORT getDecryptByte( char* pchOut );
#else
extern "C" __declspec(dllexport) bool __stdcall getDecryptByte( char* pchOut );
#endif

/************************************************
 * 函数名    :GetMD5EncryptLen:注：后续必须加MD5Encrypt(char* pchOut, char* strEncrypted)
 * 输入参数  ：
 *      strToEncrypt -- 需要加密的char* 指针
 * 返回值   ：
 *      加密后的数据长度
 * 功能     ：获取MD5加密数据长度
 ************************************************/
#ifdef Q_OS_LINUX
extern "C" int CRYPTOSHARED_EXPORT GetMD5EncryptLen(char* strToEncrypt);
#else
extern "C" __declspec(dllexport) int __stdcall GetMD5EncryptLen(char* strToEncrypt);
#endif

/************************************************
 * 函数名    :MD5Encrypt
 * 输入参数  ：
 *      strToEncrypt -- 需要加密的char* 数组
 * 输出参数  ：
 *      strEncrypted -- 加密后的char* 数组
 * 返回值   ：
 *      加密后的数据
 * 功能     :MD5加密
 ************************************************/
#ifdef Q_OS_LINUX
extern "C" int CRYPTOSHARED_EXPORT MD5Encrypt(char* strToEncrypt, char* strEncrypted);
#else
extern "C" __declspec(dllexport) int __stdcall MD5Encrypt(char* strToEncrypt, char* strEncrypted);
#endif
#endif // CRYPTO_H
